/*
 * @Description: 自定义指令函数封装
 * @Author: 0001100986/LiuShuai
 * @Date: 2021-09-30 14:15:12
 * @LastEditTime: 2023-09-11 15:45:00
 * @LastEditors: 0001101008/HuYuxi
 */
import Clipboard from 'clipboard';
import { Message } from 'element-ui';
import store from '../store';
// 操作按钮鉴权
const power = {
  inserted: (el, binding, vnode) => {
    let role = JSON.parse(sessionStorage.getItem('sys')).user.info.roleUserlabel;
    let code = binding.value;
    // 场景一：维护员只有查询权限，直接屏蔽元素
    // 场景二：管理员拥有部分操作权限，部分一级资源的查询权限
    // 场景三：超管拥有所有权限，不进行处理
    // 系统维护员
    if (role === '系统维护员' || role === 'ROLE_EXTEND_EMBED_MTN') {
      el.parentNode.removeChild(el);
    }
    // 系统管理员
    if (role === '系统管理员' || role === 'ROLE_EXTEND_EMBED_ADMIN') {
      if (code === 0) {
        vnode.elm.disabled = true;
        vnode.elm.style.color = '#c0c4cc';
        vnode.elm.style.cursor = 'not-allowed';
      }
      if (code === 1) {
        el.parentNode.removeChild(el);
      }
    }
  }
};

// el-option 选择框宽度自适应
const adaption = {
  bind: (el, binding) => {
    // 拿到input框的父节点，是为了获取完整的dom宽度
    const inputParent = el.querySelector('.el-input');
    // 拿到input框的节点，是为了给input框绑定聚焦事件
    const input = el.querySelector('.el-input__inner');
    // 获取element-ui定义好的下拉盒子
    const downBox = el.querySelector('.el-select-dropdown .el-select-dropdown__wrap');
    // 给input绑定聚焦事件，focus时触发
    input.addEventListener('focus', function() {
      // getBoundingClientRect 可以拿到dom实际宽度（包括小数点）
      let inputWidth = inputParent.getBoundingClientRect().width.toFixed(2);
      downBox.style.width = inputWidth + 'px';
    });
  }
};
// 点击复制功能
const copy = {
  bind: (el, binding) => {
    // 拿到当前的dom节点
    const dom = el;
    // 中/英文
    let language = store.state.user.user.language;
    // 节点添加手状样式
    dom.style.cursor = 'pointer';
    // 悬停显示title
    dom.title = language === 'cn' ? '点击可复制' : 'Click to copy';
    // 拿到当前需要复制的内容
    const value = binding.value;
    if (!value) {
      return;
    }
    const clipboard = new Clipboard(dom, {
      text: () => {
        return value;
      }
    });
    // 复制成功
    clipboard.on('success', () => {
      Message.success(language === 'cn' ? '复制成功！' : 'Successfully copied!');
      clipboard.destroy();
    });
    // 复制失败
    clipboard.on('error', e => {
      Message.warning(language === 'cn' ? '该浏览器不支持复制功能！' : 'This browser does not support copy function!');
      clipboard.destroy();
    });
  }
};
export default { power, adaption, copy };